const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const jwtConfig = require('../config/index').jwt;
const UserModel = require('../model/users');
/* GET home page. */
router.get('/', function (req, res, next) {
  res.send({
    code: 200,
    msg: "ok"
  });
});
// 更新用户数据的公用方法
async function updateUserDataHandler(req, res, next, dataType, successMsg) {
  const token = req.headers.authorization.split(' ')[1]; // 去除 "Bearer " 后的 token
  if (!token) {
    return res.status(401).send({
      code: 401,
      msg: '未授权访问，缺少 token'
    });
  }
  try {
    // 解密 token 获取 OpenID
    const decoded = jwt.verify(token, jwtConfig.jwtSecret);
    const openid = decoded.openid;
    // 更新用户数据
    await UserModel.updateUserData(dataType, req.body.newData, openid);
    // 返回成功响应
    res.status(200).send({
      code: 200,
      msg: successMsg,
    });
  } catch (error) {
    res.status(500).send({
      code: 500,
      msg: `数据更新失败: ${error.message}`
    });
  }
}

// 查询用户数据公用方法
async function getUserDataHandler(req, res, next, dataType, successMsg) {
  const token = req.headers.authorization.split(' ')[1]; // 去除 "Bearer " 后的 token
  if (!token) {
    return res.status(401).send({
      code: 401,
      msg: '未授权访问，缺少 token'
    });
  }
  try {
    // 解密 token 获取 OpenID
    const decoded = jwt.verify(token, jwtConfig.jwtSecret); // 解密Token
    const openid = decoded.openid;
    const userData = await UserModel.getUserData(dataType, openid);
    // 返回查询到的数据
    res.status(200).send({
      code: 200,
      msg: successMsg,
      data: userData
    });
  } catch (error) {
    console.error('Token 解密失败:', error); // 输出错误信息方便调试
    res.status(500).send({
      code: 500,
      msg: `数据查询失败: ${error.message}`
    });
  }
}

router.get('/GetOtherUser', async (req, res, next) => {
  const token = req.headers.authorization.split(' ')[1]; // 去除 "Bearer " 后的 token

  if (!token) {
    return res.status(401).send({
      code: 401,
      msg: '未授权访问，缺少 token'
    });
  }
  try {
    // 解密 token 获取 OpenID
    const decoded = jwt.verify(token, jwtConfig.jwtSecret); // 解密 Token
    const openid = decoded.openid;

    // 查询所有用户数据
    const userData = await UserModel.getAllUsersExceptOne(openid);

    // 返回查询到的数据
    res.status(200).send({
      code: 200,
      msg: '成功查询全部用户数据',
      data: userData
    });
  } catch (error) {
    console.error('Token 解密失败:', error);
    res.status(500).send({
      code: 500,
      msg: `数据查询失败: ${error.message}`
    });
  }
});

// 查询用户UID
router.get('/GetUID', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'UID', 'UID数据获取成功');
});

// 查询用户昵称
router.get('/GetName', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'NickName', '昵称数据获取成功');
});

// 更新用户昵称
router.post('/UpdateName', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'NickName', '昵称数据更新成功');
});

// 查询用户头像
router.get('/GetPhoto', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'ProfilePicture', '头像数据获取成功');
});

// 更新用户头像
router.post('/UpdatePhoto', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'ProfilePicture', '头像数据更新成功');
});

// 更新种子数据
router.post('/UpdateSeed', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'Seed', '种子数据更新成功');
});

// 查询种子数据
router.get('/GetSeed', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'Seed', '种子数据获取成功');
});

// 更新水滴数据
router.post('/UpdateWater', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'Water', '水滴数据更新成功');
});

// 查询水滴数据
router.get('/GetWater', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'Water', '水滴数据获取成功');
});

// 更新肥料数据
router.post('/UpdateFertilizer', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'Fertilizer', '肥料数据更新成功');
});

// 查询肥料数据
router.get('/GetFertilizer', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'Fertilizer', '肥料数据获取成功');
});

// 更新金币数据
router.post('/UpdateCoin', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'Coin', '金币数据更新成功');
});

// 查询金币数据
router.get('/GetCoin', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'Coin', '金币数据获取成功');
});

// 更新关卡进度数据
router.post('/UpdateLv', async (req, res, next) => {
  await updateUserDataHandler(req, res, next, 'Lv', '关卡进度数据更新成功');
});

// 查询关卡进度数据
router.get('/GetLv', async (req, res, next) => {
  await getUserDataHandler(req, res, next, 'Lv', '关卡进度获取成功');
});

module.exports = router;
